/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package GestorPruebas;

import GestorUsuarios.IDException;
import Servicios.*;
import com.mysql.jdbc.Blob;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.NoSuchAlgorithmException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 * @file Imagen.java
 * @brief Implementa la clase Imagen
 *
 * Clase que proporciona conexion entre el modelo fisico (BD) y el objeto Imagen
 *
 * @author Jose Angel Carvajal Soto
 * @version 01.00
 *
 */
public class ImagenDAO {

    /**
     * @author José Ángel Carvajal Soto
     * @brief Agrega una imagen a la BD
     * @param img que va a gregar a la BD
     */
    public static void add(Imagen img) throws SQLException, IOException,ClassNotFoundException, IDException, NoSuchAlgorithmException{
        //datos

       Integer result;
       String consulta;

       /*Subir una imagen*/
       Conexion.conectar();

       consulta = "INSERT INTO Imagen (nombre,img,idPrueba) VALUES(\'"+ img.getNombre() + "\',?,\'"+ img.getPrueba().getIdPrueba() +"\')";

       result = Conexion.subirImagen(consulta,img.getUbicacion()+img.getNombre());

        
        img.setId(result);

        Conexion.desconectar();


    }

    /**
     * @author José Ángel Carvajal Soto
     * @brief Obtinene una imagen en la BD y la guarada en una ubicacion temporañ
     * @param id de la imagen a obtener
     * @param ubicacion ubicacion temporal donde se alojara la imagen
     * @return imagen obtenida en la BD
     */
    public static ArrayList<Imagen>  get(int id, String ubicacion) throws SQLException, IOException, ClassNotFoundException, IDException, NoSuchAlgorithmException{

        //Descarga de una imagen subida
        Imagen img;

        ArrayList<Imagen> ret = new ArrayList<Imagen>() ;

        String consulta;
        Blob bytesImagen = null ;
        InputStream is ;
        FileOutputStream fw;
        Integer i=0;

        Conexion.conectar();

        consulta = "WHERE idPrueba = \'" + id + "\';";

        //Obtenemos la imagen y la guardamos en la ruta especificada
        ResultSet datos = Conexion.consultar("SELECT * FROM Imagen " + consulta );
	while(datos.next()) {
                img = new Imagen();
		img.setId(datos.getInt("idImagen"));
                img.setNombre(parsea(datos.getString("nombre"), i));
                bytesImagen = (Blob) datos.getBlob("img");
                is = bytesImagen.getBinaryStream();

                img.setUbicacion(ubicacion);

                //Guardamos la imagen
                fw = new FileOutputStream(img.getUbicacion() + img.getNombre());

                byte bytes[] = new byte[1024];
                int leidos = is.read(bytes);
                while (leidos > 0) {
                    fw.write(bytes);
                    leidos = is.read(bytes);
                }
                fw.close();
                is.close();
                ret.add(img);
                i++;
        }

        Conexion.desconectar();
        
        return ret;
    }

      /**
       * @author José Ángel Carvajal Soto
     * @brief Agerga un número entre el nombre del archivo y su extensión
     * @param nombre del archivo con su extensión.
     * @param sec número que se pone entre el nombre y la extensión.
     *
     * @return nombre con el número.
     */
    static String parsea(String nombre, Integer sec){
        String  nuevo=nombre + sec.toString();
        int j=0;
        for(int i =nombre.length()-1; i!=0 ; i--, j++)
            if(nombre.charAt(i)=='.'){
                nuevo = nombre.substring(0,i) + sec.toString() + nombre.substring(i);
                
                return nuevo;
            }
            
        
        return nuevo;
    }



}
